// import router from './router'
import store from './store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import getPageTitle from '@/utils/get-page-title'
import router, { asyncRoutes } from '@/router'
// 全局前置路由守卫
//  to:  要去哪个页面
//  from:从哪里来
//  next:它是一个函数。
//  如果直接放行 next()
//  如果要跳到其它页 next(其它页)

// 取消转圈
NProgress.configure({ showSpinner: false })

// 白名单 不需要登录就可以访问的页面
const whiteList = ['/login', '/404', '/abcd']

router.beforeEach((to, from, next) => {
  document.title = getPageTitle(to.meta.title)
  next()
})

router.beforeEach(async(to, from, next) => {
  console.log('路由一定会经过这里', to, store)
  NProgress.start()
  // 1.如果有token && 去登录页 ===> 让他去主页
  // 2.如果没有token && 去的不是登录页 ===> 让他去登录页
  const token = store.state.user.token
  if (token && to.path === '/login') {
    console.log('有了token,login不能访问!')
    next('/')
    NProgress.done()
  } else if (!token && whiteList.includes(to.path) === false) {
    console.log('没有登录&&访问页面不是:/login, /404, /abcd中的一个')
    next('/login')
    NProgress.done()
  } else {
    // 调用action 获取用户个人信息 保存到vuex
    if (!store.state.user.userInfo.userId && token) {
      // 有token,要去的不是login，就直接放行
      // 进一步获取用户信息
      // 发ajax---派发action来做
      const menus = await store.dispatch('user/getUserInfo')
      console.log('当前用户能访问的页面', menus) // ['salarys', 'settings']
      console.log('当前系统功能中提供的所有的动态路由页面是', asyncRoutes)
      // 根据本用户实际的权限menus去 asyncRoutes 中做过滤，选出本用户能访问的页面
      const filterRoutes = asyncRoutes.filter(route => {
        const routeName = route.children[0].name
        return menus.includes(routeName)
      })
      // 一定要在进入主页之前去获取用户信息
      // 把404加到最后一条
      filterRoutes.push( // 404 page must be placed at the end !!!
        { path: '*', redirect: '/404', hidden: true })
      // 改写成动态添加的方式
      // 只有在这里设置了补充了路由配置，才可能去访问页面
      // 它们不会出现左侧
      router.addRoutes(filterRoutes)
      // 根据用户实际能访问几个页面来决定从整体8个路由设置
      // 中，过滤中出来几个，然后保存到vuex中
      store.commit('menu/setMenuList', filterRoutes)
      // 解决刷新出现的白屏bug
      next({
        ...to, // next({ ...to })的目的,是保证路由添加完了再进入页面 (可以理解为重进一次)
        replace: true // 重进一次, 不保留重复历史
      })
    }
    next()
  }
})

router.afterEach((to, from) => {
  NProgress.done()
})

// import { Message } from 'element-ui'
// import { getToken } from '@/utils/auth' // get token from cookie
